找传奇、传世资源到传世资源站!

仿android4.0_Spinner下拉效果_

8.5玩家评分(1人评分)
下载后可评
介绍 评论 失效链接反馈

仿android4.0_Spinner下拉效果_ Android平台开发-第1张

package com.example.spinnerbuttondemo;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout.LayoutParams;
import android.widget.PopupWindow;

/**
 * @ClassName SpinnerButton
 * @Description TODO 防android4.0 Spinner下拉效果
 * @author kenny
 * @date 2012-8-14
 */
public class SpinnerButton extends Button {
	
	private Context mContext;
	/** 下拉PopupWindow */
	private UMSpinnerDropDownItems mPopupWindow;
	/** 下拉布局文件ResourceId */
	private int mResId;
	/** 下拉布局文件创建监听器 */
	private ViewCreatedListener mViewCreatedListener;

	public SpinnerButton(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		initButton(context);
	}

	public SpinnerButton(Context context, AttributeSet attrs) {
		super(context, attrs);
		initButton(context);
	}
	public SpinnerButton(Context context, final int resourceId,
			ViewCreatedListener mViewCreatedListener) {
		super(context);
		setResIdAndViewCreatedListener(resourceId, mViewCreatedListener);
		initButton(context);
	}

	private void initButton(Context context) {
		this.mContext = context;
		// UMSpinnerButton监听事件
		setOnClickListener(new UMSpinnerButtonOnClickListener());
	}

	public PopupWindow getPopupWindow() {
		return mPopupWindow;
	}

	public void setPopupWindow(UMSpinnerDropDownItems mPopupWindow) {
		this.mPopupWindow = mPopupWindow;
	}

	public int getResId() {
		return mResId;
	}
	/**
	 * @Description: TODO  隐藏下拉布局
	 */
	public void dismiss(){
		mPopupWindow.dismiss();
	}
	/**
	 * @Description: TODO 设置下拉布局文件,及布局文件创建监听器
	 * @param @param mResId 下拉布局文件ID
	 * @param @param mViewCreatedListener 布局文件创建监听器
	 */
	public void setResIdAndViewCreatedListener(int mResId, ViewCreatedListener mViewCreatedListener) {
		this.mViewCreatedListener = mViewCreatedListener;
		// 下拉布局文件id
		this.mResId = mResId;
		// 初始化PopupWindow
		mPopupWindow = new UMSpinnerDropDownItems(mContext);
	}

	/**
	 * UMSpinnerButton的点击事件
	 */
	class UMSpinnerButtonOnClickListener implements View.OnClickListener {

		@Override
		public void onClick(View v) {
			if (mPopupWindow != null) {
				if (!mPopupWindow.isShowing()) {
					// 设置PopupWindow弹出,退出样式
					mPopupWindow.setAnimationStyle(R.style.Animation_dropdown);
					// 计算popupWindow下拉x轴的位置
					int lx = (SpinnerButton.this.getWidth()
							- mPopupWindow.getmViewWidth() - 7) / 2;
					// showPopupWindow
					mPopupWindow.showAsDropDown(SpinnerButton.this, lx, -5);
				}
			}
		}
	}

	/**
	 * @ClassName UMSpinnerDropDownItems
	 * @Description TODO 下拉界面
	 * @author kenny
	 * @date 2012-8-14
	 */
	public class UMSpinnerDropDownItems extends PopupWindow {

		private Context mContext;
		/** 下拉视图的宽度 */
		private int mViewWidth;
		/** 下拉视图的高度 */
		private int mViewHeight;

		public UMSpinnerDropDownItems(Context context) {
			super(context);
			this.mContext = context;
			loadViews();
		}

		/**
		 * @Description: TODO 加载布局文件
		 * @param
		 * @return void
		 * @throws
		 */
		private void loadViews() {
			// 布局加载器加载布局文件
			LayoutInflater inflater = LayoutInflater.from(mContext);
			final View v = inflater.inflate(mResId, null);
			// 计算view宽高
			onMeasured(v);

			// 必须设置
			setWidth(LayoutParams.WRAP_CONTENT);
			setHeight(LayoutParams.WRAP_CONTENT);
			setContentView(v);
			setFocusable(true);
			
			// 设置布局创建监听器,以便在实例化布局控件对象
			if (mViewCreatedListener != null) {
				mViewCreatedListener.onViewCreated(v);
			}
		}

		/**
		 * @Description: TODO 计算View长宽
		 * @param @param v
		 */
		private void onMeasured(View v) {
			int w = View.MeasureSpec.makeMeasureSpec(0,
					View.MeasureSpec.UNSPECIFIED);
			int h = View.MeasureSpec.makeMeasureSpec(0,
					View.MeasureSpec.UNSPECIFIED);
			v.measure(w, h);
			mViewWidth = v.getMeasuredWidth();
			mViewHeight = v.getMeasuredHeight();
		}

		public int getmViewWidth() {
			return mViewWidth;
		}

		public void setmViewWidth(int mViewWidth) {
			this.mViewWidth = mViewWidth;
		}

		public int getmViewHeight() {
			return mViewHeight;
		}

		public void setmViewHeight(int mViewHeight) {
			this.mViewHeight = mViewHeight;
		}

	}
	/**
	 * @ClassName ViewCreatedListener 
	 * @Description TODO 布局创建监听器,实例化布局控件对象
	 * @author kenny 
	 * @date 2012-8-15
	 */
	public interface ViewCreatedListener {
		void onViewCreated(View v);
	}
}

评论

发表评论必须先登陆, 您可以 登陆 或者 注册新账号 !


在线咨询: 问题反馈
客服QQ:174666394

有问题请留言,看到后及时答复